//#include<iostream>
//#include<set>
//using namespace std;
//int main()
//{
//	int n;
//	cin >> n;
//	int sum = 0;
//	while (n)
//	{
//		sum += n % 10;
//		n /= 10;
//	}
//	cout << sum;
//}
//#include<iostream>
//using namespace std;
//int map[200][200] = { 0 };
//int map2[200][200] = { 0 };
//int main()
//{
//	int m, n;
//	cin >> m >> n;
//	int i = 0;
//	for (i; i < m; i++)
//	{
//		int j = 0;
//		for (j; j < n; j++)
//		{
//			cin >> map[i][j];
//			map2[i][j] = map[i][j];
//		}
//	}
//
//	for (i = 0; i < m; i++)
//	{
//		int j = 0;
//		for (j; j < n; j++)
//		{
//			int k = 1;
//			int sum = 1;
//
//
//			while (k + i < m)
//			{
//
//				if (map[k + i][j] == 0)
//				{
//					k++;
//					continue;
//				}
//				if (map[k + i][j] == map[i][j])
//				{
//					sum++;
//					k++;
//				}
//				else
//					break;
//			}
//			if (sum >= 3)
//			{
//
//				int l = 0;
//				while (sum && l + i < m)
//				{
//					if (map[l + i][j] != 0)
//					{
//						map2[l + i][j] = 0;
//						sum--;
//
//					}
//					l++;
//				}
//			}
//
//			k = 1;
//			sum = 1;
//			while (k + j < n)
//			{
//
//				if (map[i][k + j] == 0)
//				{
//					k++;
//					continue;
//				}if (map[i][k + j] == map[i][j])
//				{
//					sum++;
//					k++;
//				}
//				else
//					break;
//			}
//			if (sum >= 3)
//			{
//				int l = 0;
//				while (sum && l + j < n)
//				{
//					if (map[i][l + j] != 0)
//					{
//						map2[i][l + j] = 0;
//						sum--;
//
//					}
//					l++;
//				}
//			}
//
//		}
//	}
//	for (i = 0; i < m; i++)
//	{
//		int j = 0;
//		for (j; j < n; j++)
//		{
//			cout << map2[i][j] << ' ';
//		}
//		cout << endl;
//	}
//}
#include<iostream>
using namespace std;
int map[200][200] = { 0 };
int n, m, p;

void bfs(int nowx, int nowy, char c)
{
	if (nowx < 0 || nowy < 0 || nowx >= m || nowy >= n || (map[nowx][nowy] >= 1 && map[nowx][nowy] <= 3))
		return;
	map[nowx][nowy] = c;
	if (nowx + 1 < m && map[nowx + 1][nowy] != c)
		bfs(nowx + 1, nowy, c);
	if (nowx - 1 >= 0 && map[nowx - 1][nowy] != c)
		bfs(nowx - 1, nowy, c);
	if (nowy - 1 >= 0 && map[nowx][nowy - 1] != c)
		bfs(nowx, nowy - 1, c);
	if (nowy + 1 < n && map[nowx][nowy + 1] != c)
		bfs(nowx, nowy + 1, c);
}
int main()
{
	cin >> n >> m >> p;
	while (p--)
	{
		int k;
		cin >> k;
		if (k == 0)
		{
			int x1, y1, x2, y2;
			cin >> y1 >> x1 >> y2 >> x2;
			if (x1 > x2)
			{
				std::swap(x1, x2);
			}
			if (y1 > y2)
			{
				std::swap(y1, y2);
			}
			if (x1 == x2)
			{
				int i = y1;
				for (i; i <= y2; i++)
				{
					if (map[x1][i] == 2 || map[x1][i] == 3)
						continue;
					if (map[x1][i] > 3)
						map[x1][i] = 0;

					map[x1][i] += 2;
				}
			}
			else
			{
				int i = x1;
				for (i; i <= x2; i++)
				{
					if (map[i][y1] == 1 || map[i][y1] == 3)
						continue;
					if (map[i][y1] > 3)
						map[i][y1] = 0;
					map[i][y1]++;
				}
			}
		}
		else
		{
			int x, y;
			cin >> y >> x;
			char c;
			cin >> c;
			bfs(x, y, c);
		}
	}
	int i = m - 1;
	for (i; i >= 0; i--)
	{
		int j = 0;
		for (j; j < n; j++)
		{
			if (map[i][j] == 0)
				cout << '.';
			else if (map[i][j] == 2)
				cout << '-';
			else if (map[i][j] == 3)
				cout << '+';
			else if (map[i][j] == 1)
				cout << '|';
			else
				cout << (char)map[i][j];
		}
		cout << endl;
	}
}